20180422 如果遇到用js包起來的資料怎麼辦

這問題,hen麻煩。
如果是用一般方法我們是抓取不到js裡包起來的資料的,
原因可能是因為javascript裡的資料是含動態行為的部分,
詳細要等我學到js才知道。
原本我們使用request取得網頁原始碼如下:

import requests
from bs4 import BeautifulSoup

r = requests.get('http://pala.tw/js-example/').text
print (r)
###Output by requests###
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>消失的文字</title>
</head>
<body>
    <div id="word"></div>
    <p>其實上面還有段文字<p>
    <script type="text/javascript" src="example.js"></script>
</body>
</html>

如果要取得js裡面的資料,則需要使用selenium這個模組。 (pip3 install selenium)
selenium可給模擬瀏覽器讀取網頁的結果,
所以我們另外還要安裝可以讀取js隱藏資訊的webdriver,如PhantomJS。
(但跑的時候,有訊息警告我PhantomJS已被selenium棄用,請使用headless version of Chrome or Firefox,此待研究。)

from selenium import webdriver

Phanton_path = 'C:\\Users\\Ramone\\seleniumdriver\\phantomjs\\bin\\phantomjs.exe' # 給定一個瀏覽器的local位置
driver = webdriver.PhantomJS(executable_path=Phanton_path)  # 導入PhantomJs當作webdriver
driver.get('http://pala.tw/js-example/')  # 輸入網址,交給瀏覽器 
pageSource = driver.page_source  # 取得網頁原始碼
print(pageSource)

driver.close()
###Output by selenium (PhantomJS)###
<!DOCTYPE html><html lang="en"><head>
    <meta charset="UTF-8">
    <title>消失的文字</title>
</head>
<body>
    <div id="word">JavaScript渲染才看得到這行</div>
    <p>其實上面還有段文字</p><p>
    <script type="text/javascript" src="example.js"></script>

</p></body></html>

比較兩組結果的話會發現,
藏在js裡面的還有段文字:
<div id="word">JavaScript渲染才看得到這行</div>

*資料來源:https://pala.tw/python-web-crawler/

results matching ""

    No results matching ""